package sk.naive.talker;

import sk.naive.talker.message.*;
import sk.naive.talker.persistence.PersistentObject;
import sk.naive.talker.plugin.*;

import java.rmi.*;
import java.util.*;

/**
 * Talker kernel services provided for the other kernel objects.
 *
 * @author <a href="mailto:virgo@naive.deepblue.sk">Richard "Virgo" Richter</a>
 * @version $Revision: 1.40 $ $Date: 2005/02/23 19:55:53 $
 */
public interface Talker extends PersistentObject {
	public void shutdown() throws RemoteException;
	public void userOut(User user) throws RemoteException;
	public void sendToUsers(Message m, Collection<User> c, UserExcluder e) throws RemoteException;

	public Set<String> getSettable();
	public Set<String> getPersistent();

	public List<sk.naive.talker.AdapterProxy> getAdapters();

	public MessageFactory messageFactory();

	public UserFinder userFinder();

	List<TalkerPlugin> getPlugins();

	TimerService timerService();

	void addPlugin(TalkerPlugin plugin) throws PluginException;

	void removePlugin(TalkerPlugin plugin);

	public String processSystemCommand(String command);
}
